[<<Previous Entry]
[^^Up^^]
[Next Entry>>]
[Menu]
[About The Guide]
Int 2F Fn C000 - Novell Odi Link Support Layer (lsl.com) - Installation [N]
AX = C000h
Return: AL = FFh if installed
DX:BX -> FAR entry point (see below)
ES:SI -> signature string "LINKSUP$"
Notes: LSL.COM may use any multiplex number between C0h and FFh; it searches
for itself in that range, and installs using the first free multiplex
number in the range if not already loaded.
on return, ES = DX for LSL v1.10; LSL makes use of this in its search
for a previous installation
Call LSL entry point with:
BX = 0001h "Request MLID Registration"
ES:SI -> ???
???
Return: AX = completion code (see below)
DS:DI -> LSL information block
BX = 0002h get support entry points
ES:SI -> buffer for entry point record (see below)
Return: ES:SI buffer filled
BX = 0003h "Request MLID API entry point"
Return: ES:SI -> MLID (Multiple Link Interface Driver) API
entry point (call with BX=function 00h-10h,
not range-checked)
Notes: LSL v1.10 executes BX=0003h for all other values of BX
see "Novell LAN Driver Developer's Guide, Volume III" for details of
function 0001h
Values for completion code:
0000h successful
8001h out of resources
8002h bad parameter
8003h no more items
8004h item not present
8005h failed
8006h receive overflow
8007h canceled
8008h bad command
8009h duplicate entry
800Ah no such handler
800Bh no such driver
Format of entry point record:
Offset Size Description
00h DWORD pointer to protocol support entry point in LSL (see below)
04h DWORD pointer to general support entry point in LSL (see below)
Call protocol support entry point with:
BX = function number
0000h ???
0001h ???
0002h ???
0003h "ScheduleAESEvent"
ES:SI -> AES ECB to be scheduled (see below for format)
Return: ES,SI preserved
0004h "CancelAESEvent"
ES:SI -> ECB to be cancelled (see below for format)
Return: ES,SI preserved
0005h "GetIntervalMarker"
Return: DX:AX = current interval marker in milliseconds
all other registers preserved
0006h "RegisterStack"
AX = logical board number
ES:SI -> bound stack info structure (see below)
Return: BX = assigned Stack ID if AX=0000h
0007h "DeRegisterStack"
AX = protocol stack's assigned Stack ID
0008h "RegisterDefaultStack"
AX = logical board number
ES:SI -> stack info structure (see below)
0009h "DeRegisterDefaultStack"
AX = logical board number
000Ah "RegisterPrescanStack"
AX = logical board number
ES:SI -> stack info structure (see below)
000Bh "DeRegisterPrescanStack"
AX = logical board number
000Ch "SendPacket"
ES:SI -> send ECB
Return: interrupts disabled
000Dh ???
000Eh ???
000Fh ???
0010h "GetStackIDFromName"
ES:SI -> counted NUL-terminated protocol name (max 15 chars)
Return: BX = Stack ID if AX=0000h
0011h "GetPIDFromStackIDBoard"
AX = Stack ID for protocol
CX = logical board number
ES:SI -> 6-byte buffer for protocol ID
0012h "GetMLIDControlEntry"
AX = logical board number
Return: ES:SI -> MLID control handler (see below) if AX=0000h
0013h "GetProtocolControlEntry"
AX = Stack ID or
FFFEh Prescan stack
CX = logical board number
FFFFh default protocol
CX = logical board number
Return: ES:SI -> protocol stack control entry point if AX=0000h
(see below)
0014h "GetLSLStatistics"
Return: AX = 0000h (successful)
ZF set
ES:SI -> LSL statistics table (see below)
0015h "BindStack"
AX = protocol stack's assigned Stack ID
CX = logical board number
0016h "UnbindStack"
AX = protocol stack's assigned Stack ID
CX = logical board number
0017h "AddProtocolID"
AX = frame type ID code
ES:SI -> 6-byte protocol ID
CX:DI -> counted NUL-terminated short protocol name (max 15 ch)
0018h "RelinquishControl"
Return: after LSL performs any necessary background processing
0019h "GetLSLConfiguration"
Return: AX = 0000h (successful)
ZF set
ES:SI -> LSL configuration table (see below)
001Ah "GetTickMarker"
Return: AX = number of 55ms ticks since LSL loaded
BX destroyed
Return: AX = completion code (see above)
ZF set if successful
SS:SP, DS, BP preserved; most other registers may be destroyed
Call general support entry point with:
BX = function number
0000h "Allocate Memory" (obsolete)
always returns AX=8008h (BAD_COMMAND)
0001h "Free Memory" (obsolete)
always returns AX=8008h (BAD_COMMAND)
0002h "Realloc Memory" (obsolete)
always returns AX=8008h (BAD_COMMAND)
0003h "Memory Statistics" (obsolete)
always returns AX=8008h (BAD_COMMAND)
0004h "Add Memory To Pool" (obsolete)
always returns AX=8008h (BAD_COMMAND)
0005h "AddGeneralService"
ES:SI -> General Service Control Block (see below)
0006h "RemoveGeneralService"
ES:SI -> General Service Control Block (see below)
0007h "GetNETcfgPath"
Return: AX = 0000h (successful)
DS:DX -> ASCIZ pathname for NET.CFG
0008h U ??? (in LSL 1.10)
Return: AX = 0000h
ES:SI -> ??? (a 22-byte data area)
000Ah "GetCriticalSectionStatus"
Return: BX = total outstanding calls to "StartCriticalSection"
000Bh "ServiceEvents"
interrupts disabled
Return: interrupts disabled
0010h "GetStackECB"
DS:DI -> Lookahead structure (see below)
interrupts disabled
Return: ES:SI -> ECB if successful (AX=0000h,ZF set)
interrupts disabled
8000h-FFFFh reserved for user general service providers
Return: AX = completion code (see above)
ZF set if successful
SS:SP, DS, BP preserved
Call MLID control handler with:
AX = logical board number
BX = function number
0000h "GetMLIDConfiguration"
Return: ES:SI -> MLID's configuration table if successful
(see below for format)
0001h "GetMLIDStatistics"
Return: ES:SI -> MLID's statistics table if successful
(see below for format)
0002h "AddMulticastAddress"
ES:SI -> 6-byte multicast address to add
0003h "DeleteMulticastAddress"
ES:SI -> 6-byte multicast address to delete
0005h "MLIDShutdown"
CX = type
0000h permanent (also deregisters from LSL)
other temporary (shutdown hardware only)
0006h "MLIDReset" reinitialize board / restart from temp shutdown
0007h "Create Connection" (obsolete?)
???
0008h "Delete Connection" (obsolete?)
???
0009h "SetLookAheadSize"
CX = requested lookahead size (00h-80h)
0010h "PromiscuousChange"
CX = what to receive promiscuously
bit 0: MAC frames
bit 1: non-MAC frames
0011h "RegisterReceiveMonitor"
CX = subfunction
0000h disable receive monitoring
else enable receive monitoring
ES:SI -> monitor receive routine
ES:DI -> monitor transmit routine
0012h "Driver Poll" (obsolete?)
???
Return: AX = completion code (see above)
ZF set if successful
Note: not all boards/MLIDs support function 0010h; see bit 13 in the MLID
mode flags field of the MLID's configuration table
Call protocol stack control entry point with:
BX = function number
0000h "GetProtocolStackConfiguration"
Return: ES:SI -> protocol stack's configuration table
(see below)
0001h "GetProtocolStackStatistics"
Return: ES:SI -> protocol stack's statistics table (see below)
0002h "BindToMLID"
CX = board number to bind to
ES:SI -> implementation-dependant parameter string
0003h "UnBindFromMLID"
CX = board number from which protocol should unbind
ES:SI -> optional implementation-dependant parameter string
0004h "MLIDDeRegistered"
CX = board number that has de-registered from LSL
Return: AX = status
0000h successful
else implementation-dependant error codes
ZF set if successful
SS:SP, DS, BP preserved
Format of AES ECB:
Offset Size Description
00h DWORD "AESLink" pointer used by LSL for list management
04h DWORD number of milliseconds to wait
08h DWORD "AESStatus" (is set to 00000000h when AES ESR is invoked)
0Ch DWORD -> function to be invoked when time expires
ES:SI will point to this structure on entry,
DS, BP, and SS:SP must be preserved.
Format of LSL Configuration Table:
Offset Size Description
00h BYTE major version of configuration table
01h BYTE minor version of configuration table (decimal, 0-99)
02h 8 BYTEs reserved
0Ah BYTE LSL major version (decimal)
0Bh BYTE LSL minor version (decimal, 0-99)
---LSL 1.0x ---
0Ch 14 BYTEs reserved
---LSL 1.10+ ---
0Ch WORD maximum number of boards which LSL can handle
0Eh WORD maximum number of protocol IDs which LSL can handle
10h 12 BYTEs reserved
Format of LSL Statistics Table:
Offset Size Description
00h BYTE major version of statistics table format
01h BYTE minor version of statistics table format (decimal, 0-99)
02h WORD "GenericCounters" number of counters in static portion of
table
04h DWORD "ValidCountersMask" bit mask indicating which generic
counters are actually used. Bit 31 = TotalTxPackets, bit 30
is the next field, etc.
08h DWORD "TotalTxPackets" total SendPacket requests made
0Ch DWORD reserved
10h DWORD reserved
14h DWORD "AESEventsCount" number of completed AES events
18h DWORD "PostponedEvents" number of events postponed due to critical
sections inside the MLIDs
1Ch DWORD "CancelAESFailures" number of times CancelAESEvent failed
20h DWORD reserved
24h DWORD reserved
28h DWORD "TotalRxPackets" total number of GetStackECB requests
2ch DWORD "UnclaimedPackets" total number of packets not consumed by a
protocol stack
30h WORD "NumberCustom" number of custom variables that follow
32h N DWORDs custom counters
N DWORDs -> CustomCounterStrN (one per custom counter)
var length-prepended and NULL terminated string for Counter 0
...
var length-prepended and NULL terminated string for Counter N-1
Format of Protocol Stack Statistics Table:
Offset Size Description
00h BYTE statistics table major version
01h BYTE statistics table minor version (decimal, 0-99)
02h WORD number of generic counters following
04h DWORD "ValidCountersMask" (bitmask, bit 31 is TotalTxPackets)
08h DWORD TotalTxPackets
0ch DWORD TotalRxPackets
10h DWORD IgnoredRxPackets
14h WORD number of custom counters
16h N DWORDs custom counters
N DWORDs -> CustomCounterStrN (one per custom counter)
var length-prepended and NULL terminated string for Counter 0
...
var length-prepended and NULL terminated string for Counter N-1
Format of Protocol Stack Configuration Table:
Offset Size Description
00h BYTE configuration table major version
01h BYTE configuration table minor version (decimal, 0-99)
02h DWORD -> counted NUL-terminated long descriptive name for protocol
.NG limit reached, continued in next section...
This page created by ng2html v1.05, the Norton guide to HTML conversion utility.
Written by Dave Pearson